﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KuPeiXun.Dao.Action.EF
{
    #region 城市表数据EF技术访问
    /// <summary>
    /// 城市表数据EF技术访问
    /// </summary>
    /// ===============================================================
    /// 作者：邹学良 
    /// 时间：2013-03-23
    /// 描述：创建
    /// 历史：无
    /// ===============================================================
    public class City : KuPeiXun.Dao.ICity
    {
        #region 基本操作

        #region 添加一个城市数据
        /// <summary>
        /// 添加一个城市数据
        /// </summary>
        /// <param name="entity">城市实体</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        public Guid Insert(KuPeiXun.Entity.City entity)
        {
            try
            {
                Guid newid = Guid.NewGuid();
                KuPeiXun.Dao.Action.EF.DataSource.City ef = KuPeiXun.Dao.Action.EF.Convert.ToEF(entity);
                using (KuPeiXun.Dao.Action.EF.DataSource.KuPeiXunEntities entities = new DataSource.KuPeiXunEntities())
                {
                    ef.ID = newid;
                    entities.City.Add(ef);
                    entities.SaveChanges();
                }
                return newid;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #region 更新一个城市数据
        /// <summary>
        /// 更新一个城市数据
        /// </summary>
        /// <param name="entity">城市实体</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        public bool Update(KuPeiXun.Entity.City entity)
        {
            try
            {
                bool result = false;
                using (KuPeiXun.Dao.Action.EF.DataSource.KuPeiXunEntities entities = new DataSource.KuPeiXunEntities())
                {
                    var q = entities.City.FirstOrDefault(t => t.ID == entity.ID);
                    if (q != null)
                    {
                        q.English = entity.English;
                        q.IsDelete = KuPeiXun.Entity.Convert.ToBoolean(entity.IsDelete);
                        q.Manager = entity.Manager;
                        q.ManagerId = entity.ManagerId;
                        q.Name = entity.Name;
                        q.PinYin = entity.PinYin;
                        q.ProvinceId = entity.ProvinceId;
                    }
                    result = entities.SaveChanges() > 0;
                }
                return result;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #region 删除一个城市数据
        /// <summary>
        /// 删除一个城市数据
        /// </summary>
        /// <param name="id">城市id</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        public bool Delete(Guid id)
        {
            try
            {
                bool result = false;
                using (KuPeiXun.Dao.Action.EF.DataSource.KuPeiXunEntities entities = new DataSource.KuPeiXunEntities())
                {
                    var q = entities.City.FirstOrDefault(t => t.ID == id);
                    if (q != null)
                    {
                        q.IsDelete = true;
                    }
                    result = entities.SaveChanges() > 0;
                }
                return result;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #region 删除多个城市数据
        /// <summary>
        /// 删除多个城市数据
        /// </summary>
        /// <param name="idlist">城市id列表</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        public bool DeleteRang(List<Guid> idlist)
        {
            try
            {
                bool result = false;
                using (KuPeiXun.Dao.Action.EF.DataSource.KuPeiXunEntities entities = new DataSource.KuPeiXunEntities())
                {
                    foreach (Guid id in idlist)
                    {
                        var q = entities.City.FirstOrDefault(t => t.ID == id);
                        if (q != null)
                        {
                            q.IsDelete = true;
                        }
                    }
                    result = entities.SaveChanges() > 0;
                }
                return result;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #endregion

        #region 获取数据

        #region 通过ID获取城市对象
        /// <summary>
        /// 通过ID获取城市对象
        /// </summary>
        /// <param name="id">城市ID</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        public KuPeiXun.Entity.City SelectSingleById(Guid id)
        {
            try
            {
                KuPeiXun.Entity.City entity = null;
                using (KuPeiXun.Dao.Action.EF.DataSource.KuPeiXunEntities entities = new DataSource.KuPeiXunEntities())
                {
                    var linq = BaseLinq(string.Empty, entities);
                    var q = linq.FirstOrDefault(t => t.ID == id);
                    if (q != null)
                    {
                        entity = KuPeiXun.Dao.Action.EF.Convert.ToEntity(q);
                    }
                }
                return entity;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #region 通过名称获取城市对象
        /// <summary>
        /// 通过名称获取城市对象
        /// </summary>
        /// <param name="name">名称</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        public KuPeiXun.Entity.City SelectSingleByName(string name)
        {
            try
            {
                KuPeiXun.Entity.City entity = null;
                using (KuPeiXun.Dao.Action.EF.DataSource.KuPeiXunEntities entities = new DataSource.KuPeiXunEntities())
                {
                    var linq = BaseLinq(string.Empty, entities);
                    var q = linq.FirstOrDefault(t => t.Name == name);
                    if (q != null)
                    {
                        entity = KuPeiXun.Dao.Action.EF.Convert.ToEntity(q);
                    }
                }
                return entity;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #region 通过名称,州省Id获取城市对象
        /// <summary>
        /// 通过名称,州省Id获取城市对象
        /// </summary>
        /// <param name="name">名称</param>
        /// <param name="provinceid">州省Id</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        public KuPeiXun.Entity.City SelectSingleByName(string name, Guid provinceid)
        {
            try
            {
                KuPeiXun.Entity.City entity = null;
                using (KuPeiXun.Dao.Action.EF.DataSource.KuPeiXunEntities entities = new DataSource.KuPeiXunEntities())
                {
                    var linq = BaseLinq(string.Empty, entities);
                    var q = linq.FirstOrDefault(t => t.Name == name && t.ProvinceId == provinceid);
                    if (q != null)
                    {
                        entity = KuPeiXun.Dao.Action.EF.Convert.ToEntity(q);
                    }
                }
                return entity;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #region 通过关键字，数据列表条件获取城市数据列表
        /// <summary>
        /// 通过关键字，数据列表条件获取城市数据列表
        /// </summary>
        /// <param name="keystr">关键字</param>
        /// <param name="listparameter">数据列表条件</param>
        /// <param name="datacount">数据总数</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        public List<KuPeiXun.Entity.City> SelectList(string keystr, KuPeiXun.Common.Entity.ListParameter listparameter, out int datacount)
        {
            try
            {
                List<KuPeiXun.Entity.City> list = new List<Entity.City>();
                using (KuPeiXun.Dao.Action.EF.DataSource.KuPeiXunEntities entities = new DataSource.KuPeiXunEntities())
                {
                    var linq = BaseLinq(keystr, entities);
                    datacount = linq.Count();
                    list = this.Select(linq, listparameter);
                }
                return list;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #region 通过关键字，数据列表条件，管理员ID获取城市数据列表
        /// <summary>
        /// 通过关键字，数据列表条件，管理员ID获取城市数据列表
        /// </summary>
        /// <param name="keystr">关键字</param>
        /// <param name="managerid">管理员id</param>
        /// <param name="listparameter">数据列表条件</param>
        /// <param name="datacount">数据总数</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        public List<KuPeiXun.Entity.City> SelectList(string keystr, Guid managerid, KuPeiXun.Common.Entity.ListParameter listparameter, out int datacount)
        {
            try
            {
                List<KuPeiXun.Entity.City> list = new List<Entity.City>();
                using (KuPeiXun.Dao.Action.EF.DataSource.KuPeiXunEntities entities = new DataSource.KuPeiXunEntities())
                {
                    var linq = BaseLinq(keystr, entities);
                    linq = linq.Where(t => t.ManagerId == managerid);
                    datacount = linq.Count();
                    list = this.Select(linq, listparameter);
                }
                return list;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #region 通过关键字，数据列表条件，州省ID获取城市数据列表
        /// <summary>
        /// 通过关键字，数据列表条件，州省ID获取城市数据列表
        /// </summary>
        /// <param name="keystr">关键字</param>
        /// <param name="provinceid">州省id</param>
        /// <param name="listparameter">数据列表条件</param>
        /// <param name="datacount">数据总数</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        public List<KuPeiXun.Entity.City> SelectListByProvinceId(string keystr, Guid provinceid, KuPeiXun.Common.Entity.ListParameter listparameter, out int datacount)
        {
            try
            {
                List<KuPeiXun.Entity.City> list = new List<Entity.City>();
                using (KuPeiXun.Dao.Action.EF.DataSource.KuPeiXunEntities entities = new DataSource.KuPeiXunEntities())
                {
                    var linq = BaseLinq(keystr, entities);
                    linq = linq.Where(t => t.ProvinceId == provinceid);
                    datacount = linq.Count();
                    list = this.Select(linq, listparameter);
                }
                return list;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #region 通过关键字，数据列表条件，州省ID，管理员Id获取城市数据列表
        /// <summary>
        /// 通过关键字，数据列表条件，州省ID，管理员Id获取城市数据列表
        /// </summary>
        /// <param name="keystr">关键字</param>
        /// <param name="provinceid">州省id</param>
        /// <param name="managerid">管理员Id</param>
        /// <param name="listparameter">数据列表条件</param>
        /// <param name="datacount">数据总数</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        public List<KuPeiXun.Entity.City> SelectListByProvinceId(string keystr, Guid provinceid, Guid managerid, KuPeiXun.Common.Entity.ListParameter listparameter, out int datacount)
        {
            try
            {
                List<KuPeiXun.Entity.City> list = new List<Entity.City>();
                using (KuPeiXun.Dao.Action.EF.DataSource.KuPeiXunEntities entities = new DataSource.KuPeiXunEntities())
                {
                    var linq = BaseLinq(keystr, entities);
                    linq = linq.Where(t => t.ProvinceId == provinceid && t.ManagerId == managerid);
                    datacount = linq.Count();
                    list = this.Select(linq, listparameter);
                }
                return list;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #endregion

        #region 辅助方法

        #region 获取通用的linq
        /// <summary>
        /// 获取通用的linq
        /// </summary>
        /// <param name="keystr">关键字</param>
        /// <param name="entities">ef对象</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        private IQueryable<KuPeiXun.Dao.Action.EF.DataSource.City> BaseLinq(string keystr, KuPeiXun.Dao.Action.EF.DataSource.KuPeiXunEntities entities)
        {
            try
            {
                var linq = entities.City.Where(t => t.IsDelete == false
                    && (t.Name.Contains(keystr)
                    || t.PinYin.Contains(keystr)
                    || t.English.Contains(keystr))
                    );
                return linq;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #region 通过linq，列表条件过去结果集
        /// <summary>
        /// 通过linq，列表条件过去结果集
        /// </summary>
        /// <param name="linq">linq语句</param>
        /// <param name="listparameter">列表条件</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        private List<KuPeiXun.Entity.City> Select(IQueryable<KuPeiXun.Dao.Action.EF.DataSource.City> linq, KuPeiXun.Common.Entity.ListParameter listparameter)
        {
            try
            {
                List<KuPeiXun.Entity.City> list = new List<Entity.City>();
                linq = ListSort.Sort(linq, listparameter.Sort);
                linq = KuPeiXun.Utility.LinqToEntityHepler<KuPeiXun.Dao.Action.EF.DataSource.City>.GetEntitysByPaging(linq, listparameter.PagingParameter);
                var ef_list = linq.ToList();
                list = ToEntityList(ef_list);
                return list;
            }
            catch (Exception ex)
            {
                throw new KuPeiXun.Utility.LogHepler(ex);
            }
        }
        #endregion

        #region 将EF实体列表转换为自定义实体列表
        /// <summary>
        /// 将EF实体列表转换为自定义实体列表
        /// </summary>
        /// <param name="ef_list">ef实体列表</param>
        /// <returns></returns>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        private static List<KuPeiXun.Entity.City> ToEntityList(List<KuPeiXun.Dao.Action.EF.DataSource.City> ef_list)
        {
            try
            {
                List<KuPeiXun.Entity.City> list = new List<Entity.City>();
                KuPeiXun.Entity.City entity = null;
                foreach (KuPeiXun.Dao.Action.EF.DataSource.City ef in ef_list)
                {
                    entity = KuPeiXun.Dao.Action.EF.Convert.ToEntity(ef);
                    list.Add(entity);
                }
                return list;
            }
            catch (Exception ex)
            {
                throw new Utility.LogHepler(ex);
            }
        }
        #endregion

        #region 列表排序
        /// <summary>
        /// 列表排序
        /// </summary>
        /// ===============================================================
        /// 作者：邹学良 
        /// 时间：2013-03-23
        /// 描述：创建
        /// 历史：无
        /// ===============================================================
        class ListSort
        {
            #region 排序
            /// <summary>
            /// 排序
            /// </summary>
            /// <param name="linq">linq语句</param>
            /// <param name="sort">排序条件</param>
            /// <returns></returns>
            /// ===============================================================
            /// 作者：邹学良 
            /// 时间：2013-03-23
            /// 描述：创建
            /// 历史：无
            /// ===============================================================
            public static IQueryable<KuPeiXun.Dao.Action.EF.DataSource.City> Sort(IQueryable<KuPeiXun.Dao.Action.EF.DataSource.City> linq, KuPeiXun.Common.Entity.Sort sort)
            {
                try
                {
                    var newlinq = linq.OrderByDescending(t => t.CreateDate);
                    switch (sort.SortType)
                    {
                        case KuPeiXun.Common.Enum.SortType.ASE:
                            break;
                        case KuPeiXun.Common.Enum.SortType.DESC:
                            break;
                    }
                    return newlinq;
                }
                catch (Exception ex)
                {
                    throw new KuPeiXun.Utility.LogHepler(ex);
                }
            }
            #endregion
        }
        #endregion

        #endregion
    }
    #endregion
}
